package com.hz.userService.controller;

import com.hz.apiService.model.request.ApiResponse;
import com.hz.userService.service.UserService;
import lombok.RequiredArgsConstructor;
import org.springframework.jms.core.JmsMessagingTemplate;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import javax.jms.Queue;

/**
 * @author LiiiYiAn
 * @version 1.0
 * @createDate 2023-09-24 11:33
 * @projectName SchoolServicePlatformFinal
 * @className UserLoginController
 * @description 控制器 - 登录管理
 */
@RestController
@RequestMapping("/user-login")
@RequiredArgsConstructor  // 构造器注入
public class UserLoginController {

    private final UserService userService;
    private final JmsMessagingTemplate jmsMessagingTemplate;
    private final Queue queue;


    /**
     * @param username  用户名
     * @param sex       性别
     * @param password  密码
     * @param realName  真实姓名
     * @param studentId 学号（6位）
     * @param userType  用户类型
     * @return java.lang.String 注册结果
     * @author LiiiYiAn
     * @createDate 2023/9/24 15:03
     * @description 用户注册
     **/
    @PostMapping("/logon")
    public String logon(@RequestParam("username") String username, @RequestParam("sex") Integer sex,
                        @RequestParam("password") String password, @RequestParam("realName") String realName,
                        @RequestParam("studentId") String studentId, @RequestParam("userType") Integer userType) {
        // 添加用户
        int result = userService.addUser(username, realName, sex, studentId, password, userType);

        // 尝试注册日志
        jmsMessagingTemplate.convertAndSend(queue, username + " try to logon");

        return result > 0 ? ApiResponse.ok(userService.findUserByUsername(username)) : ApiResponse.intError();
    }


    /**
     * @param username 用户名
     * @param password 用户密码
     * @param userType 用户类型
     * @return java.lang.String 登录结果
     * @author LiiiYiAn
     * @createDate 2023/9/24 16:04
     * @description 用户登录
     **/
    @PostMapping("/login")
    public String login(@RequestParam("username") String username,
                        @RequestParam("password") String password,
                        @RequestParam("userType") Integer userType) {
        // 尝试登录日志，调用 listener.LogListener.saveLog()
        jmsMessagingTemplate.convertAndSend(queue, username + " 尝试登录");

        // 用户登录，登录成功返回登录信息JSON格式
        String result = userService.login(username, password, userType);

        // 登录日志，调用 listener.LogListener.saveLog()
        if (result != null)
            jmsMessagingTemplate.convertAndSend(queue, username + " 已登录");

        return result != null ? ApiResponse.ok(result) : ApiResponse.intError();
    }


    /**
     * @param username 用户名
     * @return java.lang.String 用户退出登录结果
     * @author LiiiYiAn
     * @createDate 2023/9/25 15:34
     * @description 用户退出登录
     **/
    @PostMapping("/logout")
    public String logout(String username, String pwd, String userType) {
        System.out.println(username + pwd + userType);

        int result = userService.logout(username);

        // 登出日志
        if (result > 0)
            jmsMessagingTemplate.convertAndSend(queue, username + " 已登出");

        return result > 0 ? ApiResponse.ok(result) : ApiResponse.intError();
    }
}
